{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第二题：决策树处理回归任务"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "实验内容\n",
    "1.\t使用sklearn.tree.DecisionTreeRegressor完成kaggle房价预测问题\n",
    "2.\t计算最大深度为10的决策树，训练集上十折交叉验证的MAE和RMSE\n",
    "3.\t绘制最大深度从1到30，决策树在训练集和测试集上MAE的变化曲线\n",
    "4.  选择一个合理的树的最大深度，并给出理由"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "data = pd.read_csv('data/kaggle_house_price_prediction/kaggle_hourse_price_train.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 丢弃有缺失值的特征（列）\n",
    "data.dropna(axis = 1, inplace = True)\n",
    "\n",
    "# 只保留整数的特征\n",
    "data = data[[col for col in data.dtypes.index if data.dtypes[col] == 'int64']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Id</th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>OverallQual</th>\n",
       "      <th>OverallCond</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>YearRemodAdd</th>\n",
       "      <th>BsmtFinSF1</th>\n",
       "      <th>BsmtFinSF2</th>\n",
       "      <th>BsmtUnfSF</th>\n",
       "      <th>...</th>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>60</td>\n",
       "      <td>8450</td>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>2003</td>\n",
       "      <td>2003</td>\n",
       "      <td>706</td>\n",
       "      <td>0</td>\n",
       "      <td>150</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>61</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2008</td>\n",
       "      <td>208500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>20</td>\n",
       "      <td>9600</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>1976</td>\n",
       "      <td>1976</td>\n",
       "      <td>978</td>\n",
       "      <td>0</td>\n",
       "      <td>284</td>\n",
       "      <td>...</td>\n",
       "      <td>298</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>2007</td>\n",
       "      <td>181500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>60</td>\n",
       "      <td>11250</td>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>2001</td>\n",
       "      <td>2002</td>\n",
       "      <td>486</td>\n",
       "      <td>0</td>\n",
       "      <td>434</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>42</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>2008</td>\n",
       "      <td>223500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>70</td>\n",
       "      <td>9550</td>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>1915</td>\n",
       "      <td>1970</td>\n",
       "      <td>216</td>\n",
       "      <td>0</td>\n",
       "      <td>540</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>272</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2006</td>\n",
       "      <td>140000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>60</td>\n",
       "      <td>14260</td>\n",
       "      <td>8</td>\n",
       "      <td>5</td>\n",
       "      <td>2000</td>\n",
       "      <td>2000</td>\n",
       "      <td>655</td>\n",
       "      <td>0</td>\n",
       "      <td>490</td>\n",
       "      <td>...</td>\n",
       "      <td>192</td>\n",
       "      <td>84</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>2008</td>\n",
       "      <td>250000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Id  MSSubClass  LotArea  OverallQual  OverallCond  YearBuilt  YearRemodAdd  \\\n",
       "0   1          60     8450            7            5       2003          2003   \n",
       "1   2          20     9600            6            8       1976          1976   \n",
       "2   3          60    11250            7            5       2001          2002   \n",
       "3   4          70     9550            7            5       1915          1970   \n",
       "4   5          60    14260            8            5       2000          2000   \n",
       "\n",
       "   BsmtFinSF1  BsmtFinSF2  BsmtUnfSF  ...  WoodDeckSF  OpenPorchSF  \\\n",
       "0         706           0        150  ...           0           61   \n",
       "1         978           0        284  ...         298            0   \n",
       "2         486           0        434  ...           0           42   \n",
       "3         216           0        540  ...           0           35   \n",
       "4         655           0        490  ...         192           84   \n",
       "\n",
       "   EnclosedPorch  3SsnPorch  ScreenPorch  PoolArea  MiscVal  MoSold  YrSold  \\\n",
       "0              0          0            0         0        0       2    2008   \n",
       "1              0          0            0         0        0       5    2007   \n",
       "2              0          0            0         0        0       9    2008   \n",
       "3            272          0            0         0        0       2    2006   \n",
       "4              0          0            0         0        0      12    2008   \n",
       "\n",
       "   SalePrice  \n",
       "0     208500  \n",
       "1     181500  \n",
       "2     223500  \n",
       "3     140000  \n",
       "4     250000  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 数据集划分"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "70%做训练集，30%做测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.utils import shuffle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_shuffled = shuffle(data, random_state = 32)\n",
    "split_line = int(len(data_shuffled) * 0.7)\n",
    "training_data = data_shuffled[:split_line]\n",
    "testing_data = data_shuffled[split_line:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 导入模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import cross_val_predict\n",
    "from sklearn.metrics import mean_absolute_error\n",
    "from sklearn.metrics import mean_squared_error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.tree import DecisionTreeRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 选取特征和标记"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "features = data.columns.tolist()\n",
    "target = 'SalePrice'\n",
    "features.remove(target)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 训练与预测"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "请你在下面计算树的最大深度为10时，使用训练集全量特征训练的决策树的十折交叉验证的MAE和RMSE  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "27619.67178126639\n",
      "46491.73473537031\n",
      "(1021, 34)\n"
     ]
    }
   ],
   "source": [
    "# YOUR CODE HERE\n",
    "model = DecisionTreeRegressor(max_depth = 10)\n",
    "x = training_data[features]\n",
    "y = training_data[target]\n",
    "x.shape\n",
    "prediction = cross_val_predict(model,x,y,cv = 10)\n",
    "\n",
    "mae = mean_absolute_error(y, prediction)\n",
    "rmse = mean_squared_error(y, prediction) ** 0.5\n",
    "\n",
    "print(mae)\n",
    "print(rmse)\n",
    "print(x.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 双击此处编辑\n",
    "最大深度为10，全量特征的决策树，十折交叉验证指标\n",
    "\n",
    "MAE|RMSE\n",
    "-|-\n",
    "27568.856625815053|44633.99894104175"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. 改变最大深度，绘制决策树的精度变换图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "绘制最大深度从1到30，决策树训练集和测试集MAE的变化图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.style.use(\"fivethirtyeight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x22ad21ad3d0>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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eTOuXLmClStXok+fPti4cSN69OiBsLAwLFmypD7aSlRrU311GNhKuq72iotaHLhdYKEWERERkbV6oMVdXVxc8Nxzz2HPnj24cOECFixYAIPBgBUrVtRV+4geiFwAPg13xUMO0n/q049m4LZWZ6FWERERkTWqs10PfH198cYbb+D06dOIi4urq6clemCe9vJK20ZnFoqYeiQTxZxvTERERCXMCsahoaG1+nrppZdqfM4VK1Zg4MCB8PX1Rdu2bREVFYXff/9dUkcURURHRyMoKAje3t4YMWIELl++LKlTWFiIOXPmICAgAK1atcKkSZNw584dSR2NRoPp06fDz88Pfn5+mD59OjQajaROUlISoqKi0KpVKwQEBODNN99EUVERqGno622Lf/ZwlpSdTSvCe+c435iIiIiMzArGV69eRVJSEtzd3eHp6Vnjl4eHR43Pefz4cbzwwguIjY1FTEwMFAoFxowZg8zMTFOd1atXY926dVi2bBkOHz4MT09PjB07Fjk5ZZs1zJ8/H7t27cLnn3+OvXv3IicnB1FRUdDry5blmjZtGi5evIjt27djx44duHjxoiS86/V6REVFQavVYu/evfj8888RExODBQsWmPVLpMbhta5OGPywdL7xR79q8cOtfAu1iIiIiKyJoNFoavwsOSIiAufPn4eXlxfGjRuHiRMnIjg4uE4botVq4efnhy1btmD48OEQRRFBQUF48cUXMXv2bABAfn4+AgMDsXjxYkyZMgVZWVlo164d1q1bh4kTJwIAbt++ja5du2LHjh2IjIzElStXEBoain379qF3794AgFOnTmH48OH46aefEBgYiAMHDmDixIm4dOkSfHx8AABbt27FrFmzkJCQINnQxFwJCQkIDAyso98O3a+K/aAu0CP8+zTcKbeesUop4OjolvBzqtUO6VQLPB+sA/vBerAvrAP7wTpYUz+YNWJ8+PBhnDt3Ds899xxiY2MRERGBRx99FMuXL6+zJdq0Wi0MBgNUKhUAIDExESkpKYiIiDDVsbe3R1hYGM6cOQPAuL5ycXGxpI6Pjw86dOhgqnP27Fk4OTkhNDTUVKd3795wdHSU1OnQoYMpFANAZGQkCgsLER8fXyc/H1kHdzs5/j3AFYpy8401RSKmxGWgSM/5xkRERM2Z2UNkAQEBmD9/PubPn4+ff/4ZW7duxWeffYbo6Gj0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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# YOUR CODE HERE\n",
    "train_result = []\n",
    "test_result = []\n",
    "\n",
    "for i in range(30):\n",
    "    model = DecisionTreeRegressor(max_depth = i + 1)\n",
    "    model.fit(training_data[features],training_data[target])\n",
    "    prediction1 = model.predict(training_data[features])\n",
    "    prediction2 = model.predict(testing_data[features])\n",
    "    train_result.append(mean_absolute_error(prediction1, training_data[target]))\n",
    "    test_result.append(mean_absolute_error(prediction2, testing_data[target]))\n",
    "\n",
    "depth = np.linspace(1,30,30)\n",
    "\n",
    "plt.figure(figsize = (10, 5))\n",
    "plt.plot(depth,train_result, '-', label = 'training data')\n",
    "plt.plot(depth,test_result, '-', label = 'testing data')\n",
    "plt.xlabel(\"max_depth\")\n",
    "plt.ylabel('MAE')\n",
    "plt.title(\"DecisionTreeRegressor\")\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "请你选择一个合理的树的最大深度，并给出理由\n",
    "###### 双击此处编辑\n",
    "\n",
    "我认为合理的深度为10。在训练集中，随着最大深度的增大,mae值变小,模型在训练集上的预测效果越来越好,但模型在训练集上表现的过好会导致模型的过拟合,所以在测试集上随着最大深度的增大,mae值趋势是变大的,说明从深度10开始模型出现了过拟合的情况,所以选择最大深度为10。\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
